#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

//int Fib(int n)
//{
//	if (n <= 2)
//	{
//		return 1;
//	}
//	else
//	{
//		return Fib(n - 1) + Fib(n - 2);
//	}
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret = Fib(n);
//	printf("%d\n", ret);
//
//	return 0;
//}

//void print(int arr[], int j)
//{
//	int i = 0;
//	for (i = 0; i < j; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int arr[50] = { 0 };
//	int i = 0;
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int del = 0;
//	scanf("%d", &del);
//	int j = 0;
//	for (i = 0; i < n; i++)
//	{
//		if (arr[i] != del)
//		{
//			arr[j] = arr[i];
//			j++;
//		}
//	}
//	print(arr, j);
//	
//	return 0;
//}



//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int arr[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int max = arr[0];
//	for (i = 0; i < n; i++)
//	{
//		if (arr[i] > max)
//		{
//			max = arr[i];
//		}
//	}
//	int min = arr[0];
//	for (i = 0; i < n; i++)
//	{
//		if (arr[i] < min)
//		{
//			min = arr[i];
//		}
//	}
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	printf("%d\n", max - min);
//
//	return 0;
//}


//int main()
//{
//	char ch = 0;
//	while (scanf("%c", &ch) == 1)
//	{
//		if (ch >= 'a' && ch <= 'z')
//		{
//			printf("%c\n", ch - 32);
//		}
//		else
//		{
//			printf("%c\n", ch + 32);
//		}
//		getchar();
//	}
//
//	return 0;
//}


//int main()
//{
//	char ch = 0;
//	while (scanf("%c", &ch) == 1)
//	{
//		if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
//		{
//			printf("%c is an alpatbet\n", ch);
//		}
//		else
//		{
//			printf("%c is not alpabet\n", ch);
//		}
//		getchar();
//	}
//
//	return 0;
//}


//int main()
//{
//	int a = 0;
//	int max = 0;
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		scanf("%d", &a);
//		if (a > max)
//		{
//			max = a;
//		}
//	}
//	printf("%d\n", max);
//
//	return 0;
//}

#include <math.h>
//int main()
//{
//	int i = 0;
//	for (i = 10000; i < 1000000; i++)
//	{
//		int sum = 0;
//		int j = 0;
//		for (j = 1; j <= 4; j++)
//		{
//			int t = (int)pow(10, j);
//			sum += (i / t) * (i % t);
//		}
//		if (sum == i)
//		{
//			printf("%d ", i);
//		}
//	}
//
//	return 0;
//}

//void print(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d\n", arr[i]);
//	}
//}
//int main()
//{
//	int arr[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 9; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int input = 0;
//	scanf("%d", &input);
//	int t = 0;
//	for (i = 0; i < 10; i++)
//	{
//		if (input >= arr[i] && input <= arr[i + 1])
//		{
//			t = i + 1;
//			break;
//		}
//	}
//	for (i = 9; i > t; i--)
//	{
//		arr[i] = arr[i - 1];
//	}
//	arr[t] = input;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	print(arr, sz);
//
//	return 0;
//}

//void reverse(int arr[], int sz)
//{
//	int left = 0;
//	int right = sz - 1;
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		while (left < right)
//		{
//			int t = arr[left];
//			arr[left] = arr[right];
//			arr[right] = t;
//			left++;
//			right--;
//		}
//	}
//}
//void print(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//}
//int main()
//{
//	int arr[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	reverse(arr, sz);
//	print(arr, sz);
//
//	return 0;
//}


//int main()
//{
//	int arr[3][3] = { 0 };
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 3; j++)
//		{
//			scanf("%d", &arr[i][j]);
//		}
//	}
//	int sum1 = arr[0][0] + arr[1][1] + arr[2][2];
//	int sum2 = arr[0][2] + arr[1][1] + arr[2][0];
//	printf("%d %d\n", sum1, sum2);
//
//	return 0;
//}\


//int main()
//{
//	int arr[10][10] = { 0 };
//	int n = 0;
//	int i = 0;
//	int sum = 0;
//	scanf("%d", &n);
//	for (i = 0; i < n; i++)
//	{
//		int j = 0;
//		for (j = 0; j < n; j++)
//		{
//			scanf("%d", &arr[i][j]);
//			if (i == j || i + j == n - 1)
//			{
//				sum += arr[i][j];
//			}
//		}
//	}
//	printf("%d\n", sum);
//
//	return 0;
//}

int Yue(int input1, int input2)
{
	int t = 0;
	if (input1 >= input2)
	{
		while (input2 != 0)
		{
			t = input1 % input2;
			input1 = input2;
			input2 = t;
		}
		return input1;
	}
	else
	{
		while (input1 != 0)
		{
			t = input2 % input1;
			input2 = input1;
			input1 = t;
		}
		return input2;
	}
}
int Bei(int input1, int input2, int ret1)
{
	return input1 * input2 / ret1;
}
int main()
{
	int input1 = 0;
	int input2 = 0;
	scanf("%d %d", &input1, &input2);
	int ret1 = Yue(input1, input2);
	int ret2 = Bei(input1, input2, ret1);
	printf("%d %d\n", ret1, ret2);

	return 0;
}